package com.lyz.redis.service;

import org.springframework.data.redis.core.RedisTemplate;

import java.util.Collection;
import java.util.Map;

public class StringRedisService<V> extends RedisService<String,V>{
    public StringRedisService(RedisTemplate<String, V> redisTemplate) {
        super(redisTemplate);
    }

    public void set(String k,V v){
        redisTemplate.opsForValue().set(k,v);
    }

    /**
     * 查询单个键值对
     * @param k 键
     * @return v
     */
    public V get(String k){
        return redisTemplate.opsForValue().get(k);
    }


    public V replace(String k,V v){
        return redisTemplate.opsForValue().getAndSet(k,v);
    }

    /**
     * 同时存储多个K V 键值对
     * @param kvs 键值对集合
     * @return “”
     */
    public Boolean multiSet(Map<? extends String,? extends V> kvs){
        return redisTemplate.opsForValue().multiSetIfAbsent(kvs);
    }

    /**
     * 同时获取多个key的值
     * @param keys 键集合
     * @return 值集合
     */
    public java.util.List<V> multiGet(Collection<String> keys){
        return redisTemplate.opsForValue().multiGet(keys);
    }

    /**
     * 只有在 key 不存在时设置 key 的值
     * @param k key
     * @param v value
     * @return
     */
    public Boolean setIfAbsent(String k,V v){
        return redisTemplate.opsForValue().setIfAbsent(k, v);
        //将值 value 关联到 key ，并将 key 的过期时间设为 seconds (以秒为单位)。
    }

    /**
     * 获取Key对应的Value的长度
     * @param k key
     * @return len
     */
    public Long length(String k){
        return redisTemplate.opsForValue().size(k);
    }
}
